﻿using Microsoft.Extensions.Configuration; // 引入配置文件处理库
using XchUserInfo.Common; // 引入公共命名空间
using System.Data; // 引入数据库接口库
using Microsoft.Data.SqlClient; // 引入 SQL Server 连接库
namespace XchUserInfo.DAL
{
    /// <summary>
    /// 数据库连接工厂接口，定义获取数据库连接的方法。
    /// </summary>
    public interface IConnectionFactory
    {
        /// <summary>
        /// 获取数据库连接对象。
        /// </summary>
        /// <returns>返回数据库连接</returns>
        public IDbConnection GetConnection();
    }
 /// <summary>
 /// ConnectionFactory 类，提供获取 SQL Server 数据库连接的功能。
 /// 使用此类可以从配置文件中读取数据库连接字符串，生成数据库连接实例。
 /// </summary>
 [Service(EServLife.Singleton)] // 将该类注册为单例服务，保证应用中使用的数据库连接是唯一的
 public class ConnectionFactory : IConnectionFactory
    {
        private string? _connectionString; // 用于存储数据库连接字符串
        /// <summary>
        /// 构造函数，通过 IConfiguration 获取数据库连接字符串。
        /// </summary>
        public ConnectionFactory(IConfiguration config)
        {
            // 优先读取 XchUserInfo，其次回退到 studentDB；若都不存在则早失败给出清晰错误
            _connectionString =
                config.GetConnectionString("XchUserInfo") ??
                config.GetConnectionString("studentDB");

            if (string.IsNullOrWhiteSpace(_connectionString))
            {
                throw new InvalidOperationException(
                    "未找到数据库连接串，请在 ConnectionStrings 下配置 'XchUserInfo' 或 'studentDB'。");
            }
        }
        /// <summary>
        /// 获取数据库连接对象（SQL Server）。
        /// </summary>
        /// <returns>返回 SQL Server 连接对象</returns>
        public IDbConnection GetConnection()
        {
            // 返回新的 SqlConnection 对象，使用配置的连接字符串
            return new SqlConnection(_connectionString);
        }
    }
}